home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / gui / gtlayout.lha / Source / LTP_CreateObjectNode.c < prev    next >
C/C++ Source or Header  |  1998-09-09  |  6KB  |  357 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1998 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. /*****************************************************************************/
  15.  
  16. #include <stddef.h>
  17.  
  18. /*****************************************************************************/
  19.  
  20. #include "Assert.h"
  21.  
  22. /*****************************************************************************/
  23.  
  24. ObjectNode *
  25. LTP_CreateObjectNode(LayoutHandle *handle,LONG type,ULONG id,STRPTR label)
  26. {
  27.     ObjectNode *node;
  28.     ULONG size,extra;
  29.  
  30.     if(type < BUTTON_KIND || (type > TEXT_KIND && type < INCREMENTER_KIND) || type > IMAGE_KIND)
  31.         return(NULL);
  32.  
  33.     switch(type)
  34.     {
  35.         #ifdef DO_GAUGE_KIND
  36.         {
  37.             case GAUGE_KIND:
  38.  
  39.                 extra = sizeof(GaugeExtra);
  40.                 break;
  41.         }
  42.         #endif
  43.  
  44.         #ifdef DO_TAPEDECK_KIND
  45.         {
  46.             case TAPEDECK_KIND:
  47.  
  48.                 extra = sizeof(TapeDeckExtra);
  49.                 break;
  50.         }
  51.         #endif    /* DO_TAPEDECK_KIND */
  52.  
  53.         #ifdef DO_LEVEL_KIND
  54.         {
  55.             case LEVEL_KIND:
  56.  
  57.                 extra = sizeof(LevelExtra);
  58.                 break;
  59.         }
  60.         #endif    /* DO_LEVEL_KIND */
  61.  
  62.         case BUTTON_KIND:
  63.  
  64.             extra = sizeof(ButtonExtra);
  65.             break;
  66.  
  67.         case XBAR_KIND:
  68.         case YBAR_KIND:
  69.  
  70.             extra = sizeof(BarExtra);
  71.             break;
  72.  
  73.         case BOX_KIND:
  74.  
  75.             extra = sizeof(BoxExtra);
  76.             break;
  77.  
  78.         case FRAME_KIND:
  79.  
  80.             extra = sizeof(FrameExtra);
  81.             break;
  82.  
  83.         case IMAGE_KIND:
  84.  
  85.             extra = sizeof(ImageExtra);
  86.             break;
  87.  
  88.         case PICKER_KIND:
  89.  
  90.             extra = sizeof(PickerExtra);
  91.             break;
  92.  
  93.         case INCREMENTER_KIND:
  94.  
  95.             extra = sizeof(IncrementerExtra);
  96.             break;
  97.  
  98.         case LISTVIEW_KIND:
  99.  
  100.             extra = sizeof(ListExtra);
  101.             break;
  102.  
  103.         case MX_KIND:
  104.  
  105.             extra = sizeof(RadioExtra);
  106.             break;
  107.  
  108.         case TEXT_KIND:
  109.  
  110.             extra = sizeof(TextExtra);
  111.             break;
  112.  
  113.         case NUMBER_KIND:
  114.  
  115.             extra = sizeof(NumberExtra);
  116.             break;
  117.  
  118.         case CYCLE_KIND:
  119.  
  120.             extra = sizeof(CycleExtra);
  121.             break;
  122.  
  123.         #ifdef DO_POPUP_KIND
  124.         {
  125.             case POPUP_KIND:
  126.  
  127.                 extra = sizeof(PopupExtra);
  128.                 break;
  129.         }
  130.         #endif
  131.  
  132.         #ifdef DO_TAB_KIND
  133.         {
  134.             case TAB_KIND:
  135.  
  136.                 extra = sizeof(TabExtra);
  137.                 break;
  138.         }
  139.         #endif
  140.  
  141.         case PALETTE_KIND:
  142.  
  143.             extra = sizeof(PalExtra);
  144.             break;
  145.  
  146.         case SLIDER_KIND:
  147.  
  148.             extra = sizeof(SliderExtra);
  149.             break;
  150.  
  151.         case SCROLLER_KIND:
  152.  
  153.             extra = sizeof(ScrollerExtra);
  154.             break;
  155.  
  156.         case INTEGER_KIND:
  157.  
  158.             extra = sizeof(IntegerExtra);
  159.             break;
  160.  
  161.         case PASSWORD_KIND:
  162.         case STRING_KIND:
  163.         case FRACTION_KIND:
  164.  
  165.             extra = sizeof(StringExtra);
  166.             break;
  167.  
  168.         case HORIZONTAL_KIND:
  169.         case VERTICAL_KIND:
  170.  
  171.             extra = sizeof(GroupExtra);
  172.             break;
  173.  
  174.         #ifdef DO_BOOPSI_KIND
  175.         {
  176.             case BOOPSI_KIND:
  177.  
  178.                 extra = sizeof(BOOPSIExtra);
  179.                 break;
  180.         }
  181.         #endif    /* DO_BOOPSI_KIND */
  182.  
  183.         default:
  184.  
  185.             extra = 0;
  186.             break;
  187.     }
  188.  
  189.     size = offsetof(ObjectNode,Special) + extra;
  190.  
  191.     if(node = LTP_Alloc(handle,size))
  192.     {
  193.         node->Type            = type;
  194.         node->Label            = label;
  195.         node->ID            = id;
  196.         node->PointBack        = node;
  197.         node->LayoutSpace    = 1;
  198.  
  199.         switch(type)
  200.         {
  201.             case LISTVIEW_KIND:
  202.  
  203.                 node->LabelPlace                = PLACE_ABOVE;
  204.                 node->Lines                        = 1;
  205.                 node->Current                     = ~0;
  206.                 node->Special.List.LinkID        = -1;
  207.                 node->Special.List.AutoPageID    = -1;
  208.  
  209.                 break;
  210.  
  211.             case PASSWORD_KIND:
  212.             case STRING_KIND:
  213.             case FRACTION_KIND:
  214.  
  215.                 node->Special.String.LayoutHandle     = handle;
  216.                 node->Special.String.LinkID            = -1;
  217.                 node->Special.String.MaxChars        = 256;
  218.  
  219.                 break;
  220.  
  221.             case INTEGER_KIND:
  222.  
  223.                 node->Special.Integer.LayoutHandle    = handle;
  224.                 node->Min                            = -2147483647;
  225.                 node->Max                            = 2147483647;
  226.                 node->Special.Integer.MaxChars        = 11;
  227.  
  228.                 break;
  229.  
  230.             #ifdef DO_BOOPSI_KIND
  231.             {
  232.                 case BOOPSI_KIND:
  233.  
  234.                     node->Special.BOOPSI.Link = NIL_LINK;
  235.                     break;
  236.             }
  237.             #endif    /* DO_BOOPSI_KIND */
  238.  
  239.             #ifdef DO_TAPEDECK_KIND
  240.             {
  241.                 case TAPEDECK_KIND:
  242.  
  243.                     node->LabelPlace = PLACE_BELOW;
  244.                     break;
  245.             }
  246.             #endif    /* DO_TAPEDECK_KIND */
  247.  
  248.             case MX_KIND:
  249.  
  250.                 node->LabelPlace                    = PLACE_RIGHT;
  251.                 node->Special.Radio.TitlePlace        = PLACETEXT_LEFT;
  252.                 node->Special.Radio.AutoPageID        = -1;
  253.  
  254.                 break;
  255.  
  256.             #ifdef DO_POPUP_KIND
  257.             {
  258.                 case POPUP_KIND:
  259.  
  260.                     node->Special.Popup.AutoPageID = -1;
  261.                     break;
  262.             }
  263.             #endif
  264.  
  265.             #ifdef DO_TAB_KIND
  266.             {
  267.                 case TAB_KIND:
  268.  
  269.                     node->Special.Tab.AutoPageID = -1;
  270.                     break;
  271.             }
  272.             #endif
  273.  
  274.             case CYCLE_KIND:
  275.  
  276.                 node->Special.Cycle.AutoPageID = -1;
  277.                 break;
  278.  
  279.             case SCROLLER_KIND:
  280.  
  281.                 node->Special.Scroller.Visible        = 2;
  282.                 node->Special.Scroller.RelVerify    = TRUE;
  283.                 node->Special.Scroller.Immediate    = TRUE;
  284.                 break;
  285.  
  286.             case SLIDER_KIND:
  287.  
  288.                 node->Special.Slider.LevelPlace        = PLACETEXT_LEFT;
  289.                 node->Special.Slider.LevelFormat    = LTP_NumberFormat;    /* either %ld or %lD, according to locale */
  290.  
  291.                 break;
  292.  
  293.             case FRAME_KIND:
  294.  
  295.                 node->Special.Frame.DrawBox            = TRUE;
  296.                 node->Special.Frame.Dummy.GadgetID    = id;
  297.                 break;
  298.  
  299.             case BOX_KIND:
  300.  
  301.                 node->Special.Box.DrawBox    = TRUE;
  302.                 node->Special.Box.TextPen    = -1;
  303.                 node->Special.Box.BackPen    = -1;
  304.                 break;
  305.  
  306.             case TEXT_KIND:
  307.  
  308.                 node->Special.Text.FrontPen = node->Special.Text.BackPen = -1;
  309.                 break;
  310.  
  311.             case NUMBER_KIND:
  312.  
  313.                 node->Special.Number.FrontPen = node->Special.Number.BackPen = -1;
  314.                 node->Special.Number.MaxNumberLen = 10;
  315.                 break;
  316.  
  317.             case HORIZONTAL_KIND:
  318.  
  319.                 node->Special.Group.Horizontal = TRUE;
  320.  
  321.                 /* Fall through to... */
  322.  
  323.             case VERTICAL_KIND:
  324.  
  325.                 node->Type            = GROUP_KIND;
  326.                 node->LabelPlace    = PLACE_IN;
  327.  
  328.                 break;
  329.  
  330.             #ifdef DO_LEVEL_KIND
  331.             {
  332.                 case LEVEL_KIND:
  333.  
  334.                     node->Special.Level.LevelPlace    = PLACETEXT_LEFT;
  335.                     node->LabelPlace                = PLACE_LEFT;
  336.                     node->Special.Level.LevelFormat    = LTP_NumberFormat;    /* either %ld or %lD, according to locale */
  337.                     node->Special.Level.Freedom        = FREEHORIZ;
  338.                     node->Lines                        = 2;
  339.  
  340.                     break;
  341.             }
  342.             #endif    /* DO_LEVEL_KIND */
  343.  
  344.             #ifdef DO_GAUGE_KIND
  345.             {
  346.                 case GAUGE_KIND:
  347.  
  348.                     node->Special.Gauge.LastPercentage = -1;
  349.                     break;
  350.             }
  351.             #endif    /* DO_GAUGE_KIND */
  352.         }
  353.     }
  354.  
  355.     return(node);
  356. }
  357.